var _ = require('underscore'); var print = console.log;  // 向 Python 致敬..., 主要是因为 console.log() 太长
// underscore 为 Array 提供了许多工具类方法, 可以更方便快捷地操作 Array
// first(), last() 去第一个和最后一个元素
print(_.first([2, 4, 6, 8]), _.last([2, 4, 6, 8]));  // 2 8
// flatten() 接收一个 Array, 无论这个 Array 里面嵌套了多少个 Array, flatten() 最后都把它们变成一个一维数组
print(_.flatten([1, [2], [3, [[4], [5]]]]));  // [1, 2, 3, 4, 5]
// zip() 把两个或多个数组的所有元素按索引对齐, 然后按索引合并成新数组; 例如, 一个Array存名字, 另一个Array存了分数, 要把名字和分数给对上
var names = ['Adam', 'Lisa', 'Bart'], scores = [85, 92, 59];
print(_.zip(names, scores));  // [['Adam', 85], ['Lisa', 92], ['Bart', 59]]
// unzip() 是反过来
print(_.unzip([['Adam', 85], ['Lisa', 92], ['Bart', 59]]));  // [['Adam', 'Lisa', 'Bart'], [85, 92, 59]]
// object() 有时候你会想, 与其用zip(), 为啥不把名字和分数直接对应成 Object
print(_.object(names, scores));  // {Adam: 85, Lisa: 92, Bart: 59}
// range() 让你快速生成一个序列，不再需要用 for 循环实现了
print(_.range(10));  // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(_.range(1, 11));  // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(_.range(0, 30, 5));  // [0, 5, 10, 15, 20, 25]
print(_.range(0, -10, -1));  // [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
